﻿/**
 * @file NisVehicleInfo_Struct.h
 * @brief NisVehicleInfo
 * @details 
 * @mainpage http://www.navinfo.com/
 * @author Navinfo
 * @email 400-810-0880
 * @license Navinfo Co.,Ltd. All rights reserved
 */
#ifndef	__NISVEHICLEINFOSTRUCT_H_
#define	__NISVEHICLEINFOSTRUCT_H_

PRAGMA_PACK_PUSH

namespace Navinfo {
namespace Nis {

class CAuthorization;
class CFrequentlyUsedVehicleTypes;
class COccupancy;
class CPublicServiceVehicles;

/**
 * @brief OCCUPANCY_COUNT
 * 
 */
enum OCCUPANCY_COUNT {
	TWO_PERSONS = 0x00,	///<	车内必须至少有两个人
	THREE_PERSONS = 0x01,	///<	车内必须至少有3个人
	FOUR_PERSONS = 0x02,	///<	车内必须至少有4个人
	FIVE_PERSONS = 0x03,	///<	车内必须至少有5个人
	SIX_PERSONS = 0x04,	///<	车内必须至少有6个人
	SEVEN_PERSONS = 0x05,	///<	车内必须至少有7个人
	EIGHT_PERSONS = 0x06,	///<	车内必须至少有8个人
};


/**
 * @brief 授权
 * 
 */
class DLL_PUBLIC CAuthorization
{
public:
	CAuthorization();

	explicit CAuthorization(
		uchar v_ 
		);

public:
	/**
	 * @brief 取得IsInclusive
	 * @details 
	 *
	 * @return 如果设置为true，则该属性对所有指定的车辆类型有效；如果设置为false，则该属性对除指定车辆类型以外的所有车辆类型有效。
	 */
	Navinfo::Nis::BOOL GetIsInclusive() const;

	/**
	 * @brief 取得IsDelivery
	 * @details 
	 *
	 * @return 运送或提货的车辆
	 */
	Navinfo::Nis::BOOL GetIsDelivery() const;


public:
	union {
		uchar													v;
		struct {
			uchar												m_ucIsInclusive				: 1;			///<	  如果设置为true，则该属性对所有指定的车辆类型有效；如果设置为false，则该属性对除指定车辆类型以外的所有车辆类型有效。  
			uchar												m_ucIsDelivery				: 1;			///<	  运送或提货的车辆  
		};
	};
};


/**
 * @brief 车辆类型
 * 
 */
class DLL_PUBLIC CFrequentlyUsedVehicleTypes
{
public:
	CFrequentlyUsedVehicleTypes();

	explicit CFrequentlyUsedVehicleTypes(
		uchar v_ 
		);

public:
	/**
	 * @brief 取得IsInclusive
	 * @details 
	 *
	 * @return 如果设置为true，则该属性对所有指定的车辆类型有效；如果设置为false，则该属性对除指定车辆类型之外的所有车辆类型有效
	 */
	Navinfo::Nis::BOOL GetIsInclusive() const;

	/**
	 * @brief 取得IsBus
	 * @details 
	 *
	 * @return 公交车, 大巴(客)车
	 */
	Navinfo::Nis::BOOL GetIsBus() const;

	/**
	 * @brief 取得IsMotorcycle
	 * @details 
	 *
	 * @return 符合当地法规定义的所有类型的摩托车
	 */
	Navinfo::Nis::BOOL GetIsMotorcycle() const;

	/**
	 * @brief 取得IsTruck
	 * @details 
	 *
	 * @return 符合当地法规定义的所有类型的卡车
	 */
	Navinfo::Nis::BOOL GetIsTruck() const;

	/**
	 * @brief 取得IsPersonalCar
	 * @details 
	 *
	 * @return 所有类型的乘用车（包括SUV、小型客车）
	 */
	Navinfo::Nis::BOOL GetIsPersonalCar() const;


public:
	union {
		uchar													v;
		struct {
			uchar												m_ucIsInclusive				: 1;			///<	  如果设置为true，则该属性对所有指定的车辆类型有效；如果设置为false，则该属性对除指定车辆类型之外的所有车辆类型有效  
			uchar												m_ucIsBus					: 1;			///<	  公交车, 大巴(客)车  
			uchar												m_ucIsMotorcycle			: 1;			///<	  符合当地法规定义的所有类型的摩托车  
			uchar												m_ucIsTruck					: 1;			///<	  符合当地法规定义的所有类型的卡车  
			uchar												m_ucIsPersonalCar			: 1;			///<	  所有类型的乘用车（包括SUV、小型客车）  
		};
	};
};


/**
 * @brief 车辆占用率
 * 
 */
class DLL_PUBLIC COccupancy
{
public:
	COccupancy();

	explicit COccupancy(
		uchar v_ 
		);

public:
	/**
	 * @brief 取得IsInclusive
	 * @details 
	 *
	 * @return 如果设置为true，则该属性对指定的占用计数有效；如果设置为false，则该属性对除指定占用计数之外的所有占用计数都有效 
	 */
	Navinfo::Nis::BOOL GetIsInclusive() const;

	/**
	 * @brief 取得OccupancyCount
	 * @details 
	 *
	 * @return 车辆占用率（人数）
	 */
	OCCUPANCY_COUNT GetOccupancyCount() const;


public:
	union {
		uchar													v;
		struct {
			uchar												m_ucIsInclusive				: 1;			///<	  如果设置为true，则该属性对指定的占用计数有效；如果设置为false，则该属性对除指定占用计数之外的所有占用计数都有效   
			uchar												m_ucOccupancyCount			: 3;			///<	  车辆占用率（人数）  
		};
	};
};


/**
 * @brief 公共服务车辆类型
 * 
 */
class DLL_PUBLIC CPublicServiceVehicles
{
public:
	CPublicServiceVehicles();

	explicit CPublicServiceVehicles(
		uchar v_ 
		);

public:
	/**
	 * @brief 取得IsInclusive
	 * @details 
	 *
	 * @return 如果设置为true，则该属性对所有指定的车辆类型有效；如果设置为false，则该属性对除指定车辆类型之外的所有车辆类型有效
	 */
	Navinfo::Nis::BOOL GetIsInclusive() const;

	/**
	 * @brief 取得IsEmergency
	 * @details 
	 *
	 * @return 救护车或警察或消防部门的车辆
	 */
	Navinfo::Nis::BOOL GetIsEmergency() const;

	/**
	 * @brief 取得IsTaxi
	 * @details 
	 *
	 * @return 出租车
	 */
	Navinfo::Nis::BOOL GetIsTaxi() const;

	/**
	 * @brief 取得IsPublicBus
	 * @details 
	 *
	 * @return 公车
	 */
	Navinfo::Nis::BOOL GetIsPublicBus() const;


public:
	union {
		uchar													v;
		struct {
			uchar												m_ucIsInclusive				: 1;			///<	  如果设置为true，则该属性对所有指定的车辆类型有效；如果设置为false，则该属性对除指定车辆类型之外的所有车辆类型有效  
			uchar												m_ucIsEmergency				: 1;			///<	  救护车或警察或消防部门的车辆  
			uchar												m_ucIsTaxi					: 1;			///<	  出租车  
			uchar												m_ucIsPublicBus				: 1;			///<	  公车  
		};
	};
};

}
}

PRAGMA_PACK_POP

#endif	//	__NISVEHICLEINFOSTRUCT_H_
